console.log('hello ts ok');
let age: number = 18
console.log(age);
// 联合类型，可以添加多个
let arr: (number | string)[] = ['a', 2, 3, 'r']
// 两者中的一种
let Arr: number | string[] = 12

// 自定义类型
type mix = (number | string | boolean)[]
let Mix: mix = [1, 'r', true]

//  为函数指定参数和返回值类型  
function add(num1: number, num2: number): number {
    return num1 + num2
}
const Add = (num1: number, num2: number): number => {
    return num1 + num2
}

add(1, 1)
// 函数表达式，同时添加类型
const app: (num1: number, num2: number) => number = (num1, num2) => {
    return num1 + num2
}

//  函数没有返回值
function App(name: string): void {
    console.log(name + 'ok');

}
App('张三')

// 可传可不传的参数
function nomust(start?: number, end?: number): void {
    console.log('起始索引' + start, '结束索引' + end);
}
nomust(1)

// 对象类型
let person: { name: string; age: number; sex: string; Say(): void 
    // 箭头函数指定类型
    // Say:()=>void 
petter(name:string):void} = {
    name: '张三',
    age: 20,
    sex: '男',

    Say() {

    },
    petter(name){}

}
// 对象参数可选
// MyAxios的一个配置对象参数是对象类型的，并指定他的对象属性的类型
function MyAxios(config:{url:string;method?:string}):void{
  console.log(config);
}
MyAxios({
    url:''
})
